热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

知识|四种渲染到底是啥?终于有人讲明白了(下)

上一期,我们已经简单介绍了离线渲染、实时渲染、云渲染的基本概念。大家可以参考上一期的文章。接下来,我们继续聊一下混合渲染。混合渲染混合渲染

上一期,我们已经简单介绍了离线渲染、实时渲染、云渲染的基本概念。大家可以参考上一期的文章。

接下来,我们继续聊一下混合渲染。


混合渲染

混合渲染(Hybrid Rendering)从字面意思就是非单一方法的渲染机制。这也就使得这个词,没有一个完全标准且唯一准确的定义。首先大家需要明白,渲染的最终目的是呈现画面,不论是图片,视频,还是实时交互的场景。那为了这个最终的呈现结果,如果渲染过程中采用了很多种方案来混合实现,就可以说它是混合渲染。我们从不同的角度,总结了一些混合渲染的形式。仍然不讨论具体的技术实现细节,只是为了方便大家理解概念。


  • 基于管线的混合渲染

    基于管线的混合渲染,指的是一条渲染管线中,会用到不同的计算承载方式,最终来完成渲染工作。目前的计算承载方式包括:光栅化(Rasterization,包含 Vertex Shader 和 Fragment Shader),计算着色器(Compute Shader),光线追踪着色器(Ray Tracing Shaders)。

渲染管线中,最基本的计算承载方式就是光栅化。原则上,光栅化是为了输出渲染内容的一整个渲染流程,同时也可以利用流程中的 Vertex Shader 和 Fragment Shader 进行一些计算的处理,但是光栅化过程中是发生在 Render Pass 中,其中有很多 Fix Function,比如剔除,深度测试,颜色混合等,所以用光栅化来进行计算,其实是 “不专一” 的,效率会相对低下。光栅化对于一些光线不是很复杂的场景仍然是可以胜任的。但是如果光线一旦复杂,它就没有办法很好地胜任复杂的光线算法了,因此渲染效果也就不尽人意。目前 WebGL 只具备光栅化需要的 Vertex Shader 和 Fragment Shader(Extension 版本除外),计算能力有限且不够灵活,渲染效果也不会特别优秀。WebGL 为了实现比较好的渲染效果,都是通过预烘焙的方法,将效果附加到贴图本身,以静态的方式进行展示,从而失去了对复杂光线变换的实时应对能力。

为了解决光栅化的计算效率低下问题,现代图形 API 都提供了计算着色器,即 Compute Shader。WebGPU 也应用了现代图形 API 的设计原则,同样支持 Compute Shader。Compute Shader 本质是一种通用计算的能力(GPGPU),完全运用在 Compute Pass 中的,是 “专一” 的计算单元,很类似于 CUDA(不过 CUDA 可以通过英伟达的显卡做到硬件芯片级别的加速,因此计算性能更高)。有了这种通用计算能力,就不再是光栅化中的 “模拟” 计算了,而是专业级的计算能力。比如我们用光栅化中的 Fragment Shader 模拟一些算法,只能限制在二维的平面坐标系中,而 Computer Shader 没有这种限制,也更加的灵活,速度更快。

光线追踪 Ray Tracing 是一项几十年前就有的技术,但是因为计算量太大,而无法实现实时渲染。因为 RTX 显卡的出现,让实时光线追踪这个概念再次得到了关注。光线追踪是路径追踪的一种简单形式,但是这两个概念本质上都是一种数学算法光线追踪着色器(Ray Tracing Shaders)就是特意为光线追踪这种数学算法而设计的,它由很多特殊着色器模块的组合而成。下图是 RTX 光线追踪的架构图:

https://developer.nvidia.com/rtx/ray-tracing

既然光线追踪只是一种数学算法,那么任何语言和编程环境都可以对这个数学算法进行实现。如果只看图形领域,我们可以用 CUDA, Fragment Shader(OpenGL, WebGL),Computer Shader(WebGPU,Vulkan,Metal,DX11/DX12,OpenGL Extension),RXT(DX12/DXR, Vulkan)来实现光线追踪算法。既然光线追踪算法用上面的方式都可以实现,为什么 RXT 会再次引爆这个概念呢?原因就是它可以实时地实现光线追踪算法。RTX 显卡针对光线追踪这一个非常重要且特殊的渲染算法,单独做了硬件级别的加速。通过硬件芯片可以直接运行上面提到的光线追踪过程中的各种着色器模块(可以理解成把 CUDA 的通用计算芯片重新设计,优化成更适合运行光线追踪算法的芯片),这样就可以在 3D 场景中实时的完成光线追踪的运算结果,渲染更加优质的 3D 画面。目前苹果的 M1 芯片还暂时不支持对光线追踪算法的硬件加速,所以 Metal 还是通过类似于 Compute Shader(Metal Performance Shaders)的方法来优化光线追踪算法WebGPU 也会在未来的版本中,加入对于 RTX 的支持,我们一起期待!

三种计算承载方式:光栅化,计算着色器和光线追踪着色器都已经介绍完了。它们之间并不是谁要代替谁,也没有一种完美的方法。而应该对于不同的场景,运用不同的方法。所以,对于混合渲染的概念,相信大家也更加清晰了。只要混合使用了不同渲染方法的渲染管线,我都可以理解成是混合渲染的一种体现。

https://developer.nvidia.com/blog/video-series-shiny-pixels-and-beyond-real-time-raytracing-at-seed/


  • 基于数据的混合渲染

基于数据的混合渲染,指的就是对一个 3D 场景中的不同 3D 资源(模型,场景等)进行分类,相当于对 3D 资产数据进行拆分,把不同类别的 3D 数据放到不同的渲染节点进行渲染,最后通过网络通信技术,把数据合并到一个需要显示输出的节点上,进行最终的呈现。

一般提到这种基于数据的混合渲染,都会和上一期我们聊到的云渲染有些关联。因为这种数据拆分的形式可以让我们天然地想到,把一些复杂度高,计算要求大的任务放到并行计算力更强的云端,利用渲染集群进行计算。而我们的个人终端,只渲染计算量相对较小的任务。云端渲染的结果,最终不论是以视频或图片的形式传给客户端,还是只把复杂计算的结果返回给客户端,再由客户端进行最终的呈现,都会大大降低客户端的开销。

在 5G 通信技术的快速发展下,更加多样灵活的渲染架构,例如边,端,云协同渲染也得到了更多的尝试和验证。这种渲染方式,可以充分利用终端及终端附近的边缘节点的计算能力,避免了全云端渲染可能会遇到的 “卡顿” 问题。而且,也是一种 “进可攻退可守” 的架构设计,通过渲染任务的解耦设计,可以在全终端渲染和全云端渲染之间灵活切换和调配,进而适应更复杂的渲染需求。

 同济大学贾金元老师提出的协同混合渲染的网络架构

http://www.cgn.net.cn/cms/news/100000/0000000029/2022/1/6/d1d4245469124bffbcecb83a9cb4610b.shtml



  • 基于硬件的混合渲染

基于硬件的混合渲染,指的就是 CPU 和 GPU 可以同时参与渲染任务的一种混合渲染模式。这里我们参考 V-ray 的混合渲染模式。首先要说明的是,单纯的 GPU 渲染有两个问题:1)很难进行 Debug:GPU 的程序如果出错基本都会返回一个 kernel dump(就是内核挂掉了),不会有相应的报错信息提示。2)无法充分利用 CPU 的性能:之前的渲染工作基本都是交给 GPU 来进行计算的,CPU 把任务提交给 GPU 之后,CPU 本身其实会处于一段时间的空闲状态,等于白白浪费了计算能力。为了解决这两个问题,V-ray 提出的混合渲染就是可以让 CUDA 同时运行在 CPU 和 GPU 上,这样可以充分利用 CPU 提交任务给 GPU 之后,本身的空闲时间,同样可以进行渲染的计算工作。经过测试,V-ray 的混合渲染比单纯的 GPU 渲染,完成时间平均缩短了约 20% 左右。这里需要强调下,这种 CPU 和 GPU 同时进行的混合渲染模式,在 WebGL 的标准下是无法实现的,因为它采用的是全局状态机模式,CPU 必须要等待 GPU 的运行结果,才能继续做下一个任务,简单说就是同步机制。而 WebGPU 采用了现代图形 API 的方法,完全遵循异步形式,这样才具备实现这种混合渲染的基础能力

https://www.chaos.com/blog/understanding-v-ray-hybrid-rendering


  • 基于框架的混合渲染

基于框架的混合渲染,指的是渲染过程可以从之前的框架转移到另外一个全新的框架上实现。2019 年,Unity 提出 Data-Oriented Technology Stack(DOTS)技术,并通过 Hybrid Renderer 来实现。DOTS 的核心就是 ECS(Entities, Components, Systems)的架构设计,也标志着 ECS 框架在游戏引擎中的应用(关于 ECS 的细节和优劣势我们这里就不做讨论了)。Unity 的 Hybrid Renderer 带来的混合渲染,其实指的是可以让渲染过程从之前的 OOP 模式(Object-oriented Programming)转换到 DOP 模式(Data-oriented Programming),是把 GameObjects 转换成 ECS 中的 Entities。最终的目的就是利用 ECS 的数据连续内存存储特征,提高缓存命中率,同时引入多核并行计算的优势,加快渲染过程

https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@0.50/manual/index.html

讲到这里,我们把一些常见的混合渲染的形式都已经介绍完了。总结下就是,混合渲染没有一个固定的定义,只要把 “渲染” 混合使用,都可以叫混合渲染。

目前,我们已经介绍了离线渲染、实时渲染、云渲染、混合渲染。要强调的是,它们之间所用到的技术和场景,有很多都是相互交叠在一起的,并没有一个标准唯一的准则。我们希望的是,大家如果在再次遇到这些概念,或者一些 3D 渲染引擎产品的时候,可以按照这些渲染分类,去快速的进行定位和分析,更好的帮助我们理解和学习,解决我们遇到的问题,这样就已经足够好啦!

我们在以后的文章中,会继续分享对于云渲染未来的一些思考,欢迎大家继续关注。



Orillusion 致力于打造全世界第一款完全开源基于 WebGPU 标准的一种轻量级渲染引擎,目标是在浏览器中实现桌面级的渲染效果,支持超大复杂场景的 3D 呈现。易上手,易分享,易迭代,易协作、成本低,跨平台是我们的核心优势,我们将为 3D 场景爆发时代提供引擎基础工具。

未来我们将会持续把最干货最前沿的 WebGPU 技术分享给每一位社区成员,也欢迎大家为 Orillusion 开源社区做出自己的贡献。我们一直坚信,开源社区的技术留痕是每一位技术人员最崇高的追求!因此,我们尊重,我们认可,我们更期待,加入 Orillusion,让我们共同进步!

——Link uncharted, 链接未来世界


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 计算成像的原理与应用研究
    本文探讨了计算成像的原理与应用研究。首先介绍了小孔成像实验和软件方面的相关内容。随后从傅里叶光学的角度简单谈了成像的过程。成像是观测样品分布的一种方法,通过成像系统接收光的强度来呈现图像。视网膜作为接收端接收到的图像实际上是由像元组成的矩阵,每个元素代表相应位置像元接收光的强度。大脑通过对图像的分析,得出一系列信息,如识别物体、判断距离等。计算成像是一种采集记录系统,通过处理数据得到样品分布与像的对应关系,用于后续问题的分析。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
author-avatar
mobiledu2502912817
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有